<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>
<title>Estrategias</title>
<meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="Pablo Rodríguez Fern&aacute;ndez"/>
<meta name="keywords" content="man,poker,instrucciones,manual,usuario,estrategias,condiciones,acciones,ia, m&aacute;quina, programaci&oacute;n, script"/>
<meta name="description" content="Este texto es un manual para programar estrategias de poker."/>
<link href="./style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="menu">
<a name="top"></a>
	<ul>
		<li><a href="./index.html">Inicio</a></li>
		<li><a href="./uso.html">Manual de Usuario</a></li>
		<li><a href="./reglas.html">Reglas del Poker</a></li>
		<li><a href="#est">Estrategias</a></li>
		<ul>
			<li><a href="#pest">Programando una estrategia</a></li>
			<ul>
				<li><a href="#vest">Variables</a></li>
			</ul>
			<li><a href="#cest">Condiciones</a></li>
			<li><a href="#aest">Acciones</a></li>
		</ul>
	</ul>
</div>
<div id="main">
	<h1><a name="est" href="#top" title="Volver arriba">Estrategias</a></h1>
	<p>Una <em>estrategia</em> es una secuencia de instrucciones que puede ejecutar la m&aacute;quina para jugar al poker.</p>
	<p>La aplicaci&oacute;n proporciona unas estrategias por defecto que el usuario puede usar; sin embargo, el usuario puede definir sus propias estrategias y luego utilizarlas con sus jugadores m&aacute;quina.</p>
	<h2><a name="pest" href="#top" title="Volver arriba">Programando una estrategia</a></h2>
	<p>Para <em>programar una estrategia</em> tan s&oacute;lo necesita un simple editor de texto e imaginaci&oacute;n, pues los archivos de estrategias se tratan de ficheros de texto interpretados por el sistema, tambi&eacute;n conocidos como <em>script</em>.</p>
	<p>Una estrategia tiene la siguiente estructura:</p>
<code>Condici&oacute;n1(par&aacute;metro) Condici&oacute;n2() : acci&oacute;n1
Condici&oacute;n2() Condici&oacute;n3(par1,par2,par3) : acci&oacute;n2

</code>
	<p>El programa leer&aacute; e interpretar&aacute; el archivo de la estrategia y, evaluando l&iacute;nea por l&iacute;nea, <strong>ejecutar&aacute; la acci&oacute;n de la primera l&iacute;nea que cumpla todas las condiciones</strong>.</p>
	<p>Con tal de que la aplicaci&oacute;n interprete correctamente el script, <strong>es necesario que deje un espacio en blanco entre condici&oacute;n y condici&oacute;n</strong>, as&iacute; como <strong>un espacio entre los dos puntos (<kbd>:</kbd>) y cualquier otro elemento</strong>; <strong>no debe dejar espacios entre los par&aacute; de una condici&oacute;n, un&iacute;camente una coma</strong>. Tambi&eacute;n es necesario que <strong>el archivo acabe con una l&iacute;nea en blanco</strong>.</p>
	<h3><a href="#top" name="vest" title="Volver arriba">Variables</a></h3>
	<p>Es posible utilizar par&aacute;metros que sean variables. Para utilizarlas basta <strong>escribir en un par&aacute;metro de salida (<em>out</em>) una palabra o una letra</strong> que tomar&aacute; el valor que reciba de la condici&oacute;n que la ha usado, <strong>pudiendo utilizarse como par&aacute;metro de entrada (<em>in</em>) en otra condici&oacute;n</strong>. Veamos un ejemplo:</p>
	<code>midinero(x) menor(x,5) : pasar()</code>
	<p>Este script guarda el valor del jugador m&aacute;quina en la variable <var>x</var> y comprueba si es menor que 5; en caso de cumplirse, pasa y abandona la partida.</p>
	<h2><a name="cest" href="#top" title="Volver arriba">Condiciones</a></h2>
	<p>A continuaci&oacute;n se muestra una tabla con las distintas condiciones que puede usar el usuario para programar sus estrategias:</p>
	<!-- <div style="margin-left: auto; margin-right: auto; width: 85%;"> --><table>
		<tr class="primcelda">
			<td>Cabecera</td>
			<td>Descripci&oacute;n</td>
		</tr>
		<tr>
			<td>cierto()</td>
			<td>Siempre retorna cierto.</td>
		</tr>
		<tr>
			<td>falso()</td>
			<td>Siempre retorna falso.</td>
		</tr>
		<tr>
			<td>menor(in:x,in:y)</td>
			<td>Retorna cierto si x es menor que y.</td>
		</tr>
		<tr>
			<td>igual(in:x,in:y)</td>
			<td>Retorna cierto si x es igual a y.</td>
		</tr>
		<tr>
			<td>mayor(in:x,in:y)</td>
			<td>Retorna cierto si x es mayor que y.</td>
		</tr>
		<tr>
			<td>midinero(out:x)</td>
			<td>Retorna siempre cierto. El par&aacute;metro x recoge el valor del dinero del jugador que tiene la estrategia.</td>
		</tr>
		<tr>
			<td>dinero(in:x,out :y)</td>
			<td>Siempre retorna cierto. El par&aacute;metro y recoge el dinero que tiene el jugador que tiene el indice x en el vector de jugadores de la mesa.</td>
		</tr>
		<tr>
			<td>aleatoria(in:p0)</td>
			<td>Retorna cierto aleatoriamente con la probabilidad indicada en el par&aacute;metro.</td>
		</tr>
		<tr>
			<td>alguienHaSubido()</td>
			<td>Retorna cierto si alguno de los jugadores que hay delante del jugador activo ha subido la apuesta.</td>
		</tr>
		<tr>
			<td>multiplicarApuesta(in:p0,out:p1)</td>
			<td>Retorna cierto si tengo dinero para asumir la apuesta. Se asigna a p1 la cantidad que hay que sumar a la apuesta que hay en la mesa para que quede multiplicada por el factor p0.</td>
		</tr>
		<tr>
			<td>descartes(out: p0,p1,p2,p3,p4)</td>
			<td>Retorna cierto si tiene que descartarse de al menos una carta. Usaremos esta condici&oacute;n para decidir que cartas va a descartar el jugador  m&aacute;quina, en el caso que queramos descartar todas las cartas que no sean comodines ni est&eacute;n repetidas.</td>
		</tr>
		<tr>
			<td>apostando()</td>
			<td>Retorna cierto si la partida se encuentra en alguna de las rondas de apuestas.</td>
		</tr>
		<tr>
			<td>apostandoPrimeraRonda()</td>
			<td>Retorna cierto si nos encontramos en la primrea ronda de apuestas.</td>
		</tr>
		<tr>
			<td>apostandoSegundaRonda()</td>
			<td>Retorna cierto si nos encontramos en la segunda ronda de apuestas.</td>
		</tr>
		<tr>
			<td>descartando()</td>
			<td>Retorna cierto si estamos en la ronda de descartes.</td>
		</tr>
		<tr>
			<td>evaluarMano(out:p0)</td>
			<td>Retorna cierto si la evaluaci&oacute;n est&aacute; en el rango esperado. Al par&aacute;metro p0 se le asigna el valor resultante de evaluar la mano que tiene el jugador.</td>
		</tr>
		<tr>
			<td>comodines(out:p0)</td>
			<td>Retorna cierto si la baraja tiene comodines. Al par&aacute;metro p0 se le asigna el n&uacute;mero de comodines de la baraja que hay en la mesa.</td>
		</tr>
		<tr>
			<td>bote(out:p0)</td>
			<td>Retorna siempre cierto. A p0 se le asigna el importe del bote acumulado que  hay en la mesa.</td>
		</tr>
		<tr>
			<td>noTengoNada()</td>
			<td>Retorna cierto si la mano no tiene ninguna combinaci&oacute;n excepto carta alta.</td>
		</tr>
		<tr>
			<td>buenaJugada()</td>
			<td>Retorna cierto si la mano tiene un trío o una jugada superior.</td>
		</tr>
		<tr>
			<td>doblePareja()</td>
			<td>Retorna cierto si la mano tiene una doble pareja.</td>
		</tr>
		<tr>
			<td>muyBuenaJugada()</td>
			<td>Retorna cierto si la mano tiene un full o una jugada superior.</td>
		</tr>
		<tr>
			<td>pareja()</td>
			<td>Retorna cierto si la mano tiene una pareja.</td>
		</tr>
		<tr>
			<td>poker()</td>
			<td>Retorna cierto si la mano tiene un poker.</td>
		</tr>
		<tr>
			<td>trio()</td>
			<td>Retorna cierto si la mano tiene un trío.</td>
		</tr>
		<tr>
			<td>miPosicion(out:p0)</td>
			<td>Asigna al par&aacute;metro p0 la posici&oacute;n del jugador en la mesa.</td>
		</tr>
		<tr>
			<td>nadieHaSubido()</td>
			<td>Retorna cierto si nadie de los que hay delante de mí ha subido la apuesta.</td>
		</tr>
		<tr>
			<td>noTengoDinero()</td>
			<td>Retorna cierto si mi dinero es menor que la apuesta que hay en la mesa.</td>
		</tr>
		<tr>
			<td>numJugadores(out:p0)</td>
			<td>Retorna siempre cierto. La condici&oacute;n asigna al par&aacute;metro p0 el numero de jugadores de la mesa.</td>
		</tr>
		<tr>
			<td>quieroDescartar()</td>
			<td>Retorna cierto en caso de tener: nada, pareja, doble pareja, trío o poker.</td>
		</tr>
		<tr>
			<td>soyElPrimero()</td>
			<td>Retorna cierto si soy el primero que tiene que actuar en esta ronda, o porque soy el que inicia la ronda o porque los que van delante mío han pasado.</td>
		</tr>
		<tr>
			<td>soyElUltimo()</td>
			<td>Retorna cierto si soy el ultimo que tiene que actuar en esta ronda (si los que van detr&aacute;s mio han pasado o no tienen dinero para cubrir la apuesta).</td>
		</tr>
	</table><!-- </div> -->
	<h2><a name="aest" href="#top" title="Volver arriba">Acciones</a></h2>
	<p>En la siguiente tabla se pueden observar las distintas acciones que puede llevar a cabo una estrategia:</p>
	<table>
		<tr class="primcelda">
			<td>Cabecera</td>
			<td>Descripci&oacute;n</td>
		</tr>
		<tr>
			<td>subir(num)</td>
			<td>Iguala la apuesta con el resto de los jugadores y sube num.</td>
		</tr>
		<tr>
			<td>igualar()</td>
			<td>Iguala la apuesta con el resto de los jugadores.</td>
		</tr>
		<tr>
			<td>pasar()</td>
			<td>Abandona la partida en curso.</td>
		</tr>
		<tr>
			<td>descartar(c0,c1,c2,c3,c4)</td>
			<td>Descarta la carta que tenga en su posici&oacute;n un 1.<br/>Ejemplo: descartar(0,0,1,1,0) descartar&aacute; la carta c2 y c3</td>
		</tr>
	</table>
</div>
</body>
</html>
